﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Collections;

using Interfaces;

//Denne klasse er lavet af gruppe 3 til projektet omkring BF-OKS
//denne klasse fordeler varer efter råvarer og færdigvarer, og så en liste med mangelvarer som er vare der er i underskud på lageret ifht minimum beholdning.

namespace Model
{



    [Serializable]
    public class VareCollection
    {
       private List<Raavare> raavarer;       // aggregering af nul til mange varer
       private List<Færdigvare> faerdigvarer;
       private List<Raavare> mangelvarer;
       // Konstruktør
       public VareCollection()
       {
           raavarer = new List<Raavare>();    // pga aggregering skal vareliste skabes
           faerdigvarer = new List<Færdigvare>();
           mangelvarer = new List<Raavare>();
       }

       // Tilføjer vare
       public Raavare TilføjVare(int raavarenr, string betegnelse, double kilo, string location, double minbeholdning)
       {
           Raavare raavare = new Raavare(raavarenr, betegnelse, kilo, location, minbeholdning);
           raavarer.Add(raavare);
           return raavare;
       }

       //JESPER - Sletter Råvare
       public void FjernVare(int raavareNr)
       {
           Raavare vare = FindVare(raavareNr);
           raavarer.Remove(vare);
       }

       public void TilfoejMangelVare(Raavare mv)
       {
           mangelvarer.Add(mv);
       }

        //MADS oprette færdigvare
       public Færdigvare TilfoejfaerdigVare(int raavarenr, string betegnelse, double kilo, string location,double indkoebspris, int varenr)
       {
           Færdigvare faerdigvare = new Færdigvare(raavarenr, betegnelse, kilo, location, indkoebspris, varenr);
           faerdigvarer.Add(faerdigvare);
           return faerdigvare;
       }

       public void TilfoejFaerdigVare(Færdigvare vare)
       {
           faerdigvarer.Add(vare);
       }

        //MADS - FINDRAAVARE TIL ORDRELINIE
       public Raavare FindVare(int varenr)
       {
           Raavare aktuelvare = null;

           foreach (Raavare rav in raavarer)
           {
               if (varenr == rav.VARENR)
               {
                   aktuelvare = rav;
                   break;
               }
               else
               {
               }
           }
           return aktuelvare;
       }

        public Vare FindFaerdigvare(int varenr)
        {
            return FindVare(varenr);
        }

        public ProduktionsLinie OpretProduktionsLinie(int OrdrelinieID, DateTime dato, string varebet, double kilo, String Betegnelse, String Location)
        {
            return new ProduktionsLinie(OrdrelinieID, dato, varebet, kilo, Betegnelse, Location);
        }

        public IEnumerator GetRaavareIterator() // Genererer en numerator som peger på medlemsobjekterne
        {
            return raavarer.GetEnumerator();
        }

        public bool EksistererFaerdigvare(int varenr) 
        {
            
            bool eksisterer = false;

            foreach (Færdigvare vare in faerdigvarer)
            {
                    if (vare.getVarenr() == varenr)
                        eksisterer = true;
            }
            return eksisterer;
        }
        public List<Raavare> RAAVARER { get { return raavarer; } }
        public List<Færdigvare> FAERDIGVARER { get { return faerdigvarer; } }
        public int FaerdigvarerANTAL { get { return faerdigvarer.Count; } }
        public int RaavarerANTAL { get { return raavarer.Count; } }
        public List<Raavare> MANGELVARER {   get { return mangelvarer; } }
        public int MANTAL { get { return mangelvarer.Count; } }
    }
}
